import { PropType } from 'vue';
import { searchBarProps } from '../../SearchBar';
import type { CSearchBarProps, SearchOptionsType } from '../../SearchBar';
import type { CPageHeaderProps } from '../../PageHeader';
import { pageHeaderProps } from '../../PageHeader';
import type { CTableProps } from '@/components/CTable';
import type { TableFieldsSettingType, ColumnSettingConfigType } from '@/components/CTable';
export type { TableFieldsSettingType, ColumnSettingConfigType };

// PageTable组件的props入参类型
export interface CPageTableProps extends Partial<CPageHeaderProps & CSearchBarProps> {
  /**
   * 展示page header
   */
  showPageHeader?: boolean;
  // 搜索的form
  searchForm?: any;
  // 搜索的配置
  searchOptions?: SearchOptionsType[];
  // 表格配置
  tableOptions?: CTableProps;
  /**
   * 列表字段配置
   */
  tableFieldsSetting?: TableFieldsSettingType[];
  /**
   * 是否需要字段配置
   */
  enableFieldsSetting?: boolean;
  /**
   * 是否是详情页的表格
   */
  isDetailPage?: boolean;
  /**
   * 是否显示searchbar
   */
  isShowSearchBar?: boolean;
  /**
   * 主体是否独立滚动
   */
  isContentScroll?: boolean;
  /**
   * 是否是树结构
   */
  isTree?: boolean;
}

export const pageProps = {
  /**
   * 页面头部相关配置
   */
  ...pageHeaderProps,
  /**
   * 搜索栏相关配置
   */
  ...searchBarProps,
  showPageHeader: {
    type: Boolean,
    default: true
  },
  // 搜素表单
  searchForm: {
    type: Object as PropType<any>,
    default: () => {
      return {};
    }
  },
  // 搜索表单配置
  searchOptions: {
    type: Object as PropType<SearchOptionsType[]>,
    default: () => {
      return [];
    }
  },
  // 表格配置
  tableOptions: {
    type: Object as PropType<CTableProps>
  },
  /**
   * 表格字段配置
   */
  tableFieldsSetting: {
    type: Array as PropType<TableFieldsSettingType[]>,
    default: () => {
      return [];
    }
  },
  /**
   * 是否需要字段配置
   */
  enableFieldsSetting: {
    type: Boolean,
    default: false
  },
  /**
   * 是否是详情页的表格
   */
  isDetailPage: {
    type: Boolean,
    default: false
  },
  /**
   * 是否显示searchbar 默认显示
   */
  isShowSearchBar: {
    type: Boolean,
    default: true
  },
  /**
   * 主体是否独立滚动
   */
  isContentScroll: {
    type: Boolean,
    default: false
  }
};
